【C】位运算求集合的幂集
所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。
例如集合S = {a,b,c};那么S的幂集P(S) = { Ø ,{a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} }。
N个元素的集合的幂集共有2^N个集合构成的元素。
下面是利用C语言实现的求幂集的代码。最大支持元素N <= 31。
1 #include <stdio.h> 2 3 void Powerset( int a[],int n )/*a[]为所求集合,n为元素的个数*/ 4 { 5 unsigned int code = 0; 6 int i; 7 8 for( code = 0; code < (1<<n) ; code++ ) 9 { 10 printf("{ "); 11 for(i=0;i<(1<<n);i++) 12 { 13 if( code&(1<<i) )/*输出code第i位为1的对应元素a[i]*/ 14 { 15 printf("%d ",a[i]); 16 } 17 } 18 printf("}"); 19 printf("\n"); 20 } 21 } 22 23 int main() 24 { 25 int a[4] = {1,2,3,4}; 26 Powerset(a,4); 27 return 0; 28 }